home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / pdselect / awnp / awnp-docs / demos / dictionary.rx < prev    next >
Text File  |  2000-02-16  |  9KB  |  350 lines

  1. /*Online dictionary Vers 1.1
  2. Run from the shell or workbench
  3. 'rx dictionary.rx word_to_find' to see definition
  4. 'rx dictionary.rx ' to open GUI
  5. This script uses the Meriam Webster site to look up definitions.
  6. www.m-w.com
  7. */
  8.  
  9. trace('E')
  10.  
  11. if ~show('L','rexxsupport.library') then
  12. if ~addlib('rexxsupport.library',0,-30,0) then
  13. exit(20)
  14. call pragma('priority',1)
  15. nl='a'x
  16. /*call setupbubble()*/
  17. delaybub=0
  18. parse arg w .
  19. if w~='' then do
  20. shell=1
  21. call trans()
  22. say w
  23. say txt
  24. exit
  25. end
  26.  
  27.  
  28. call setdefaults()
  29. call buildgui()
  30.  
  31. do while ~eof(ca)
  32. if delaybub>0 then do
  33. delaybub=delaybub-1
  34. if delaybub=0 then do
  35. bubleon=newbub
  36. call topipe('bubble top 'bubx 'left 'buby 'gt "'help.newbub'"')
  37. end
  38. end
  39.   call topipe('tick 50')
  40.   in= readln(ca)
  41.   parse var in in1 in2 in3 in4 in5 .
  42.   if (in1='help' & helpon~=0 ) then do
  43. call bubble(in2)
  44. end
  45.   if in1='active' then call bubble(0)
  46.   if in1='key' then call key()
  47.   if in1='gadget' then call gadget()
  48.   if in1='iconify' then call iconify()
  49.   if in1='menu' then call menu()
  50.   if in1='close' then call windowclosed()
  51. end
  52. exit
  53.  
  54. key:
  55.  
  56. scrpos=topipe('id 'txtgad)
  57. if scrpos=oldpos then scrpos=scrpos-40
  58. if ((in2=77) & (scrpos<oldpos)) then scrpos=topipe('id 'txtgad' scroll' scrpos+80)
  59. if (in2=76) then do
  60. if (scrpos>79) then scrpos=topipe('id 'txtgad' scroll' scrpos-80)
  61. else scrpos=topipe('id 'txtgad' scroll 0' )
  62. end
  63. return
  64.  
  65. gadget:
  66. if in2=wordgad then do
  67.   parse var in . . w .
  68.   call trans()
  69.   call topipe('id 'txtgad' scroll -1 gt "*n-----*n'in3'*n*n"')
  70.   call writeln(ca,'id 'txtgad' scroll -1 bd gt "'length(txt)+1'"')
  71.   newpos=topipe(txt)
  72.   call topipe('id 'txtgad' scroll 'oldpos)
  73.   oldpos=newpos
  74. end
  75. if in2=quitgad then exit
  76. if in2=cleargad then oldpos=topipe('id 'txtgad' gt ""')
  77. if in2=savegad then do
  78.   call writeln(ca,'id 'filegad' s 1 save 1 fn "'filename'"')
  79.   parse value readln(ca) with res1 '"' res2 '"'
  80.   if (res1>0) then do
  81.     filename=res2
  82.     call writeln(ca,'id 'txtgad' read')
  83.     len=readln(ca)
  84.     data=readch(ca,len)
  85.     if( open(out,res2,'W')) then do
  86.       call   writech(out,data)
  87.       call   close(out)
  88.     end
  89.   end
  90. end
  91. return
  92.  
  93. windowclosed:
  94. /*call setenv()*/
  95. exit
  96. return
  97.  
  98. setdefaults:
  99. parse source . . called .
  100. oldpos=0
  101. filename=''
  102. scrpos=''
  103. envname='onlinedictionary'
  104. call getenv()
  105. abouttx='Online Dictionary*nVers 1.1*nAuthor William Parker*nGUI by AWNPipe:'
  106. return
  107.  
  108. buildgui:
  109. help.1=' Enter word to look up '
  110. help.2=' This area displays the retreived definitions. It is read only *n but you may drag and copy the results to the clipboard. *n The cursor keys can be used to scroll the information.'
  111. help.4=' Save retreived definitions to a file '
  112. help.5=' Remove all retreived definitions '
  113. help.6=' Quit the dictionary '
  114. call open(ca,"awnpipe:dict/xc")
  115. call topipe(' ps awebb "Online Dictionary" sk v defg ig h state m a 'window' ii "'called'"' )
  116. call topipe(' label gt "Word: " ua')
  117. wordgad=topipe('string chl lj')
  118. txtgad=topipe('textfield ro arrows')
  119. call topipe(' layout weih 0')
  120. savegad=topipe('button gt "Save Log"')
  121. cleargad=topipe('button gt "Clear Log"')
  122. quitgad=topipe('button gt "Quit"')
  123. call topipe(' layoutend')
  124. filegad=topipe('getfile save ua')
  125. men0gad= topipe('Menu gt "Project|Window|$@SSnapshot|$@UUnsnapshot|@AAbout|@H^&Bubble Help|-|@QQuit"')
  126. call pragma('W','N')
  127. if (showlist('A','MIAMI')|(showlist('P','MIAMI.1'))) then do
  128.   men1gad= topipe('Menu gt "Miami|Online|Offline|Status|Hide GUI|Show GUI|SSL Version 2|$On|$Off|-|Quit Miami"')
  129. end
  130. call pragma('W')
  131. call topipe("open")
  132. return
  133.  
  134. topipe:
  135. /* this routine does error checking on lines written to pipe.*/
  136. /*get line to output*/
  137. parse arg out
  138. /* write to the pipe*/
  139. call writeln(ca,out)
  140. /*get responce and parse it.*/
  141. res=readln(ca)
  142. parse var res res1 res2 res3
  143. /* if all is ok return the second part of the responce (usualy the GID)*/
  144. if res1='ok' then return(res2)
  145. /* something went wrong, we notify the user then exit */
  146. /*show problem line and responce (reponce may be just a blank line)*/
  147. say 'error from: 'out
  148. say '  responce: ' in
  149. exit
  150.  
  151. trans:
  152. if testtcp() then return
  153. if shell~=1 then do
  154. call topipe('id 'wordgad' dis 1 ref')
  155. call topipe('id 0 s 8 gt " Connecting ..."')
  156. end
  157. w=translate(w,' ','+')
  158. t1='book=Dictionary&va='w
  159. t2=length(t1)
  160. t2='Content-Length: 't2
  161. call open(net,'tcp:www.m-w.com/80')
  162. if shell~=1 then call topipe('id 0 s 8 gt " Getting definition ..."')
  163. call writeln(net,"POST /cgi-bin/dictionary HTTP/1.0")
  164. call writeln(net,"User-Agent: MSIE/4.0; (Spoofed by billybobsdictthing (1.0 beta))")
  165. call writeln(net,"Accept: */*;q=1")
  166. call writeln(net,"Host: www.m-w.com")
  167. call writeln(net,t2)
  168. call writeln(net,"Content-Type: application/x-www-form-urlencoded")
  169. call writeln(net,"")
  170. call writeln(net,t1)
  171. call writeln(net,"")
  172. def=''
  173. do while ~eof(net)
  174.   if length(def)< 54000 then def=def||readch(net,10000)
  175. end
  176. parse var def 'Main Entry:'. '0a'x d1 '<center>'
  177. do while index(d1,'<br>')>0
  178.   parse var d1 d2 '<br>' d3
  179.   d1=d2||'0a'x||d3
  180. end
  181. do while index(d1,'<')>0
  182.   parse var d1 d2 '<' . '>' d3
  183.   d1=d2||d3
  184. end
  185. call open(fh,'awnpipe:dec/u/f','W')
  186. call writech(fh,d1)
  187. call close(fh)
  188. if shell~=1 then call topipe('id 0 s 8 gt " Parsing result ..."')
  189. call open(fh,'awnpipe:dec','R')
  190. sel=readch(fh,64000)
  191. call close(fh)
  192. d1='0a'x'Etymology:'
  193. parse var sel t1 (d1) . 'Date:' . '0a'x t2
  194. sel=t1||t2
  195. wrap=75
  196. txt=''
  197. do while sel~=''
  198.   parse var sel line '0a'x sel
  199.   if length(line)<wrap then txt=txt||line||'0a'x
  200.   else do
  201.     wrapc=wrap
  202.     do while line~=''
  203.       parse var line wrd line
  204.       wrdl=length(wrd)
  205.       if wrdl <= wrapc then do
  206.         txt=txt||wrd' '
  207.         wrapc=wrapc-wrdl-1
  208.       end
  209.       else do
  210.         txt=txt||'0a'x||wrd' '
  211.         wrapc=wrap-wrdl-1
  212.         if wrapc<=0 then do
  213.           wrapc=wrap
  214.           txt=txt||'0a'x
  215.         end
  216.       end
  217.     end
  218.     txt=txt||'0a'x
  219.   end
  220. end
  221. if txt='' then txt= 'not found'
  222. call close(net)
  223. if shell~=1 then do
  224. call topipe('id 'wordgad' dis 0 ref')
  225. call topipe('id 0 s 8 gt " Online Dictionary"')
  226. end
  227.  
  228. return
  229.  
  230. showtx:
  231. call open(ptx,'awnpipe:tbtxt/xc')
  232. call writeln(ptx,'db dg Information q cg m a so si ')
  233. call writeln(ptx,'label gt "'arg(2)'"')
  234. call writeln(ptx,'open')
  235. if arg(1)=0 then call writeln(ptx,'m')
  236. else call writeln(ptx,'tick 'arg(1))
  237. call close(ptx)
  238. return(0)
  239.  
  240. menu:
  241. if in2=1 then do
  242.   if in3=5 then do
  243.     if in4=0 then do
  244.       address command "echo yes >ENV:Miami/SSLVERSION2"
  245.       call showtx(200,' Miami SSL Version 2 on ')
  246.     end
  247.     else do
  248.       address command "echo no >ENV:Miami/SSLVERSION2"
  249.       call showtx(200,' Miami SSL Version 2 off ')
  250.     end
  251.     return()
  252.   end
  253.   if ~show('P','MIAMI.1') then do
  254.     if in3=1 | in3=1 | in3=6 then do
  255.       call showtx(200,' Miami is not running ')
  256.       return()
  257.     end
  258.     address command 'Run >NIL: Miami:Miami '
  259.     do 5 while ~show('P','MIAMI.1')
  260.       address command 'waitforport MIAMI.1'
  261.     end
  262.     if rc=5 then return()
  263.   end
  264.   if in3=1 | in3=6 then address MIAMI.1 'OFFLINE'
  265.   if in3=7 then address MIAMI.1 'QUIT'
  266.   if in3=0  then address MIAMI.1 'ONLINE'
  267.   if in3=3 then address MIAMI.1 'HIDE'
  268.   if in3=4 then address MIAMI.1 'SHOW'
  269.   if in3=2 | in1 =0 | in1=11 then do
  270.     address MIAMI.1 'ISONLINE'
  271.     if rc then call showtx(200,' Miami is online ')
  272.     else call showtx(200,' Miami is offline ')
  273.   end
  274. end
  275. if in2=0 then do
  276. if in3=0 then do
  277. if in4=0 then call setenvarc()
  278. if in4=1 then call unsetenvarc()
  279. end
  280. if in3=1 then call showtx(500,abouttx)
  281. if in3=2 then do
  282. helpon=in5
  283. if helpon=0 then call bubble(0)
  284. end
  285. if in3=4 then  exit
  286. end
  287. return()
  288.  
  289. iconify:
  290. if in2=1 then call topipe('id 0 s 32')
  291. else call topipe('id 0 s 64')
  292. return
  293.  
  294. getenv:
  295. if(open(env,'env:'envname,'R')) then do
  296. windows=readln(env)
  297. filename=readln(env)
  298. call close(env)
  299. parse var windows wl wt ww wh .
  300. window= 'top' wt 'left' wl 'width' ww 'height' wh
  301. end
  302. else window='tl width 400 height 200'
  303. return
  304.  
  305. setenv:
  306. call writeln(ca,'id 0 read')
  307. windowr=readln(ca)
  308. parse var windowr wl wt ww wh .
  309. if (datatype(wt,N) &datatype(wl,N) &datatype(ww,N) & datatype(wh,N) ) then do
  310. call open(env,'env:'envname,'W')
  311. call writeln(env,windowr)
  312. call writeln(env,filename)
  313. call close(env)
  314. end
  315. return(0)
  316.  
  317. setenvarc:
  318. call setenv()
  319. address command 'copy env:'envname' envarc:'envname '>nil:'
  320. return
  321.  
  322. unsetenvarc:
  323. call setenv()
  324. if exists('envarc:'envname) then delete('envarc:'envname)
  325. if exists('env:'envname) then delete('env:'envname)
  326. return
  327.  
  328. testtcp:
  329. call pragma('W','N')
  330. if ~showlist(H,'TCP') then do
  331. showtx(0,'Can not find TCP device*nYou must be online*nto use dictionary')
  332. call pragma('W')
  333. return(1)
  334. end
  335. call pragma('W')
  336. return(0)
  337.  
  338. bubble:
  339. newbub=arg(1)
  340. if newbub=-1 then newbub=0
  341. if (bubbleon=newbub) then return()
  342. if bubbleon~=0 then call  topipe('bubble')
  343. if newbub=0 then delaybub=0
  344. else do
  345. bubx=in3
  346. buby=in4
  347. delaybub=3
  348. end
  349. return
  350.